﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using BUS;
using DATA.BusinessObjects;
using DATA.ManagerObjects;
using NHibernate.Mapping;

namespace Presentation
{
    public partial class frmLapHoaDonThanhToan : Form
    {
        //stt tăng tự động
        private int stt = 1;
        //danh sách phiếu thuê phòng cần lập hoá đơn
        private List<Phieuthuephong> list_ptp = new List<Phieuthuephong>();

        public frmLapHoaDonThanhToan()
        {
            InitializeComponent();
        }

        private void frmLapHoaDonThanhToan_Load(object sender, EventArgs e)
        {
            ResetForm();
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dgvChiTietHoaDon_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                DataGridViewRow dgvr = dgvChiTietHoaDon.CurrentRow;
                //kiểm tra phòng đã chọn có trùng lại không
                if (KiemTra(dgvr.Cells["TenPhong"].Value.ToString(), dgvr.Index))
                {
                    dgvr.Cells["TenPhong"].Value = null;
                    MessageBox.Show("Đã chọn phòng này rồi!!!");
                    return;
                }

                //lấy thông tin phiếu thuê phòng                
                dgvr.Cells["STT"].Value = stt;
                stt++;

                Phieuthuephong ptp = PhieuThuePhongBUS.LayPhieuThuePhongTheoMaPhongDangThue(dgvr.Cells["TenPhong"].Value.ToString());
                if (ptp == null)
                {
                    dgvr.Cells["STT"].Value = null;
                    dgvr.Cells["TenPhong"].Value = null;
                    dgvr.Cells["SoNgayThue"].Value = null;
                    dgvr.Cells["DonGiaThue"].Value = null;
                    dgvr.Cells["ThanhTien"].Value = null;
                    stt--;
                    if (list_ptp.Count - 1 >= dgvr.Index)
                        list_ptp.RemoveAt(dgvr.Index);

                    CapNhatTriGiaChoHoaDon();

                    MessageBox.Show("Phòng Này Chưa Có Thuê Làm Sao Trả");
                    return;
                }

                int songaythue = 0;
                songaythue = Math.Abs(ptp.NgayThuePhong.Value.Subtract(DateTime.Today).Days);
                dgvr.Cells["SoNgayThue"].Value = songaythue;
                dgvr.Cells["DonGiaThue"].Value = ptp.DonGiaThue;
                Decimal d = new decimal(songaythue * ptp.DonGiaThue.Value);
                dgvr.Cells["ThanhTien"].Value = d.ToString();
                dgvr.Cells["MPTP"].Value = ptp.Id;
                list_ptp.Add(ptp);

                CapNhatTriGiaChoHoaDon();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void btnLapHoaDon_Click(object sender, EventArgs e)
        {
            List<Phieuthuephong> temp = list_ptp;
            if(temp.Count <= 0)
            {
                MessageBox.Show("Chưa chọn phòng để tính tiền !!!");
                return;
            }

            //tạo khách hàng
            Khachhang kh = KhachHangBUS.LayKhachHangMoiNhat();
            int mkh_moinhat = int.Parse(kh.Id.Substring(3));
            kh = new Khachhang();
            kh.Id = "MKH" + (mkh_moinhat + 1).ToString();
            kh.TenKhachHang = txtTenKhachHang.Text;
            kh.DiaChi = txtDiaChi.Text;
            kh.Cmnd = txtCMND.Text;
            Loaikhach lk = new Loaikhach();
            lk.Id = "ND";
            kh.Loaikhach = lk;

            if (HoaDonBUS.LapHoaDon(kh, temp) == 1)
                MessageBox.Show("Lập Hoá Đơn Thành Công");
            else
                MessageBox.Show("Không Thể Lập Hoá Đơn");

            ResetForm();
        }

        private void dgvChiTietHoaDon_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            CapNhatTriGiaChoHoaDon();
        }

        #region Bình - Cập nhật trị giá cho hoá đơn trên form
        private void CapNhatTriGiaChoHoaDon()
        {
            double trigia = 0;
            for (int i = 0; i < dgvChiTietHoaDon.Rows.Count - 1; i++)
            {
                if (dgvChiTietHoaDon.Rows[i].Cells["ThanhTien"].Value != null)
                    trigia += double.Parse(dgvChiTietHoaDon.Rows[i].Cells["ThanhTien"].Value.ToString());
            }

            if (trigia == 0)
                txtTriGia.Mask = "";
            else
                txtTriGia.Mask = "000,000,000";

            txtTriGia.Text = trigia.ToString();
        }
        #endregion

        #region Bình - Kiểm tra phòng đã tồn tại trong danh sách tính tiền (datagridview) chưa
        //true - đã tồn tại
        //fasle - chưa tồn tại
        //tham số vt là vị trí của dòng cần kiểm tra nên ta bỏ qua
        private Boolean KiemTra(String mp, int vt)
        {
            for (int i = 0; i < dgvChiTietHoaDon.Rows.Count - 1; i++)
                if (i != vt && dgvChiTietHoaDon.Rows[i].Cells["TenPhong"].Value != null)
                        if (dgvChiTietHoaDon.Rows[i].Cells["TenPhong"].Value.ToString() == mp)
                            return true;
            return false;
        }
        #endregion

        #region Bình - reset form lập hoá đơn thanh toán
        private void ResetForm()
        {
            txtCMND.Text = txtDiaChi.Text = txtTenKhachHang.Text = "";
            txtTriGia.Mask = "";
            txtTriGia.Text = "0";

            //load combobox
            IManagerFactory MF = new ManagerFactory();
            IPhongManager PM = MF.GetPhongManager();
            IList<Phong> list = PM.GetAll();

            dgvChiTietHoaDon.Rows.Clear();
            DataGridViewComboBoxColumn dgvcbx = (DataGridViewComboBoxColumn)dgvChiTietHoaDon.Columns["TenPhong"];
            dgvcbx.DataSource = list;
            dgvcbx.DisplayMember = "TenPhong";
            dgvcbx.ValueMember = "Id";
            txtTriGia.Text = "0";
        }
        #endregion

    }
}
